#ifndef _CONTROLLER_H
#define _CONTROLLER_H

#include <SDL/SDL.h>
namespace math { namespace ui {

class Controller {
public:
Controller(GLView * glview, Model * model) : mp_view(glview), mp_model(model) {}
	virtual ~ Controller() {}
	virtual void OnEvent(SDL_Event* Event){}
	virtual void OnInputFocus(){}
	virtual void OnInputBlur(){}
	virtual void OnKeyDown(SDLKey sym, SDLMod mod, Uint16 unicode){}
	virtual void OnKeyUp(SDLKey sym, SDLMod mod, Uint16 unicode){}
	virtual void OnMouseFocus(){}
	virtual void OnMouseBlur(){}
	virtual void OnMouseMove(int mX, int mY, int relX, int relY, bool Left,bool Right,bool Middle){}
	virtual void OnMouseWheel(bool Up, bool Down){}  //Not implemented
	virtual void OnLButtonDown(int mX, int mY){}
	virtual void OnLButtonUp(int mX, int mY){}
	virtual void OnRButtonDown(int mX, int mY){}
	virtual void OnRButtonUp(int mX, int mY){}
	virtual void OnMButtonDown(int mX, int mY){}
	virtual void OnMButtonUp(int mX, int mY){}
	virtual void OnJoyAxis(Uint8 which, Uint8 axis, Sint16 value){}
	virtual void OnJoyButtonDown(Uint8 which, Uint8 button){}
	virtual void OnJoyButtonUp(Uint8 which, Uint8 button){}
	virtual void OnJoyHat(Uint8 which, Uint8 hat, Uint8 value){}
	virtual void OnJoyBall(Uint8 which, Uint8 ball, Sint16 xrel, Sint16 yrel){}
	virtual void OnMinimize(){}
	virtual void OnRestore(){}
	virtual void OnResize(int w,int h){}
	virtual void OnExpose(){}
	virtual void OnExit(){}
	virtual void OnDraw(){}
	virtual void OnUser(Uint8 type, int code, void* data1, void* data2){}
	virtual GLView * get_view (){return this->mp_view ;}
protected: 
	GLView * mp_view ;
	Model * mp_model ;
};

	}}

#endif
